Projeto Final

Estatística Descritiva e Construção de Dashboards

Raquel Marques / Marcus Dias / Ricardo Nascimento Ferreira

12/15/2021

Projeto Final

Carregando pacotes

Importação do banco do ENADE/INEP

dataset <<- read_csv2("MICRODADOS_ENADE_2017.txt")

Seleção das Variáveis Desejadas

ds.filtered <<- dataset %>% dplyr::select(
  NT_OBJ_FG,
  CO_GRUPO,
  CO_REGIAO_CURSO,
  QE_I02,
  CO_TURNO_GRADUACAO
)

NT_OBJ_FG | Quantitativa Discreta | Nota bruta na parte objetiva da formação geral. (valor de 0 a 100) CO_GRUPO | Qualitativa Nominal | Código da área de enquadramento do curso no Enade CO_REGIAO_CURSO | Qualitativa Nominal | Código da região de funcionamento do curso QE_I02 | Qualitativa Nominal | Qual é a sua cor ou raça? CO_TURNO_GRADUACAO | Qualitativa Nominal | Código do turno de graduação

Seleção do Curso Desejado

ds.engenharia <<- ds.filtered %>% filter(CO_GRUPO == 6306)

Transformação das Variáveis

ds.engenharia <<- ds.engenharia %>% mutate(
  Curso = case_when(
    CO_GRUPO == 6306 ~ "Engenharia",
    TRUE ~ "Outro"
  )
)
#Nota
ds.engenharia = ds.engenharia %>% mutate(
  Nota = NT_OBJ_FG
)
#Regiao
ds.engenharia = ds.engenharia %>% mutate(
  Regiao = case_when(
    CO_REGIAO_CURSO == 1 ~ "Norte",
    CO_REGIAO_CURSO == 2 ~ "Nordeste",
    CO_REGIAO_CURSO == 3 ~ "Sudeste",
    CO_REGIAO_CURSO == 4 ~ "Sul",
    CO_REGIAO_CURSO == 5 ~ "Centro-Oeste"
  )
)
#Raca
ds.engenharia = ds.engenharia %>% mutate(
  Raca = case_when(
    QE_I02 == "A" ~ "Branca",
    QE_I02 == "B" ~ "Preta",
    QE_I02 == "C" ~ "Amarela",
    QE_I02 == "D" ~ "Parda",
    QE_I02 == "E" ~ "Indígena",
    QE_I02 == "F" ~ "Não quero declarar"
  )
)
#Turno
ds.engenharia = ds.engenharia %>% mutate(
  Turno = case_when(
    CO_TURNO_GRADUACAO == 1 ~ "Matutino",
    CO_TURNO_GRADUACAO == 2 ~ "Vespertino",
    CO_TURNO_GRADUACAO == 3 ~ "Integral",
    CO_TURNO_GRADUACAO == 4 ~ "Noturno"
  )
)
# Limpar Dataset
cps = c(  "NT_OBJ_FG",
          "CO_GRUPO",
          "CO_REGIAO_CURSO",
          "QE_I02",
          "CO_TURNO_GRADUACAO")
ds.engenharia <<- subset(ds.engenharia, select = -c(NT_OBJ_FG,
                                                  CO_GRUPO,
                                                  CO_REGIAO_CURSO,
                                                  QE_I02,
                                                  CO_TURNO_GRADUACAO) )

Análise Descritiva das Variáveis (raw data)

s <<- summary(ds.engenharia)
d <<- describe(ds.engenharia)

Variáveis Obrigatorias

Região

unique(d$Regiao) %>% kbl %>% kable_material_dark(full_width = F)
x
Regiao
x
n 8699
missing 0
distinct 5
x
Centro-Oeste
Nordeste
Norte
Sudeste
Sul
x
363
1720
572
5130
914
x
L1 Centro-Oeste
L2 Nordeste
L3 Norte
L4 Sudeste
L5 Sul
H5 Centro-Oeste
H4 Nordeste
H3 Norte
H2 Sudeste
H1 Sul

Raça

unique(d$Raca) %>% kbl %>% kable_material_dark(full_width = F)
x
Raca
x
n 8148
missing 551
distinct 6
x
Amarela
Branca
Indígena
Não quero declarar
Parda
Preta
x
240
4715
26
297
2331
539
x
L1 Amarela
L2 Branca
L3 Indígena
L4 Não quero declarar
L5 Parda
H5 Branca
H4 Indígena
H3 Não quero declarar
H2 Parda
H1 Preta

Turno

unique(d$Turno) %>% kbl %>% kable_material_dark(full_width = F)
x
Turno
x
n 8698
missing 1
distinct 4
x
Integral
Matutino
Noturno
Vespertino
x
4353
1230
2956
159

Nota

unique(d$Nota) %>% kbl %>% kable_material_dark(full_width = F)
x
Nota
x
n 7639
missing 1060
distinct 9
Info 0.969
Mean 59.5
Gmd 23.6
x
0.0
12.5
25.0
37.5
50.0
62.5
75.0
87.5
100.0
x
59
190
521
955
1482
1733
1498
926
275
x
L1 0.0
L2 12.5
L3 25.0
L4 37.5
L5 50.0
H5 50.0
H4 62.5
H3 75.0
H2 87.5
H1 100.0

Data Quality

Missing

summary_na = ds.engenharia %>%
  select(everything()) %>%
  summarise_all(list(~ sum(is.na(.))))

summary_na %>% kbl %>% kable_material_dark(full_width = F)
Curso Nota Regiao Raca Turno
0 1060 0 551 1

Removendo todos os NAs

ds.eng.final = ds.engenharia %>% na.omit()
d3 <- describe(ds.eng.final)

#Verificando se todos os NA's foram de fato removidos

summary_final.nas=ds.eng.final %>%
  select(everything()) %>%  
  summarise_all(list(~sum(is.na(.))))

summary_final.nas %>% kbl %>% kable_material_dark(full_width = F)
Curso Nota Regiao Raca Turno
0 0 0 0 0
#Quatidade De Linhas Do Banco Original
dim(ds.engenharia)[1]
## [1] 8699
#Quatidade De Linhas Do Banco sem os NAS
dim(ds.eng.final)[1]
## [1] 7576
#observaçoes removidas
dim(ds.engenharia)[1] - dim(ds.eng.final)[1]
## [1] 1123
( dim(ds.engenharia)[1] - dim(ds.eng.final)[1] ) / dim(ds.engenharia)[1] 
## [1] 0.1290953

Foram removidos em torno de 13% do banco de dados original devido à retirada de observações faltantes.

Análise Descritiva das Variáveis (clean data)

ds.eng.final %>%
  select(Nota) %>%
  summarise(
    quantidade = n(),
    media = mean(Nota),
    mediana = median(Nota),
    moda = Mode(Nota),
    cv = sd(Nota) / media * 100,
    assimetria = skewness(Nota),
    curtose = kurtosis(Nota)
  ) %>%
  arrange(desc(mediana)) %>% 
  kbl %>% kable_material_dark(full_width = F)
quantidade media mediana moda cv assimetria curtose
7576 59.5301 62.5 62.5 35.40857 -0.2893871 -0.3265427
#Estatísticas resumo 
summary(ds.eng.final$Nota) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   50.00   62.50   59.53   75.00  100.00

Gráficos de Análise Descritiva para a Variável Nota dos Alunos de Engenharia

g_hist = ggplot(ds.eng.final, aes(x = Nota)) +
  geom_histogram(color = "black",
                 fill = "lightblue",
                 bins = 10,
                 aes(y = (..count..) / sum(..count..))) +
  ggtitle("Histograma da nota dos alunos de Engenharia") +
  xlab("nota") +
  ylab("Frequência relativa")

g_densidade = ggplot(ds.eng.final, aes(x = Nota)) +
  geom_density(col = 2, size = 1, aes(y = 30 * (..count..) / sum(..count..))) +
  ggtitle("Curva de densidade da nota dos alunos de Engenharia") +
  xlab("nota") +
  ylab("Frequência relativa")

g_hist_densidade = ggplot(ds.eng.final, aes(x = Nota)) +
  geom_histogram(color = "black",
                 fill = "lightblue",
                 bins = 10,
                 aes(y = (..count..) / sum(..count..))) +
  geom_density(col = 2, size = 1, aes(y = 30 * (..count..) /  sum(..count..))) +
  ggtitle("Histograma e curva de densidade da nota dos alunos de Engenharia") +
  xlab("Nota") +
  ylab("Frequência relativa")

grid.arrange(g_hist,
             g_densidade,
             g_hist_densidade,
             nrow = 3,
             ncol = 1)

Comparando as médias de Turno por Raça

ds.eng.final_mod1 = ds.eng.final %>%
  select(Raca, Nota, Turno) %>%
  group_by(Turno, Raca) %>%
  summarise(
    quantidade = n(),
    media = mean(Nota, na.rm = T),
    mediana = median(Nota, na.rm = T),
    cv = sd(Nota, na.rm = T) / media * 100,
    amplitude_interquartil = IQR(Nota)
  ) %>%
  arrange(desc(mediana))
Turno Raca quantidade media mediana cv amplitude_interquartil
Vespertino Indígena 2 81.25000 81.25 10.87857 6.250
Vespertino Não quero declarar 3 62.50000 75.00 34.64102 18.750
Vespertino Branca 42 56.25000 56.25 28.30130 12.500
Vespertino Parda 85 50.44118 50.00 36.16456 25.000
Vespertino Preta 6 47.91667 43.75 60.43322 40.625
Vespertino Amarela 2 37.50000 37.50 0.00000 0.000
Turno Raca quantidade media mediana cv amplitude_interquartil
Matutino Não quero declarar 56 68.30357 75.0 32.73056 28.125
Matutino Amarela 43 57.84884 62.5 35.60670 37.500
Matutino Branca 559 62.90250 62.5 34.35164 25.000
Matutino Indígena 5 62.50000 62.5 24.49490 12.500
Matutino Parda 383 56.85379 62.5 38.98203 37.500
Matutino Preta 89 58.56742 62.5 36.48720 25.000
Turno Raca quantidade media mediana cv amplitude_interquartil
Integral Amarela 98 63.13776 62.50 28.05227 25
Integral Branca 2428 62.75741 62.50 32.12889 25
Integral Não quero declarar 150 62.66667 62.50 36.31885 25
Integral Parda 972 61.81842 62.50 33.63136 25
Integral Preta 215 61.33721 62.50 33.26363 25
Integral Indígena 10 52.50000 56.25 35.13642 25
Turno Raca quantidade media mediana cv amplitude_interquartil
Noturno Indígena 6 58.33333 62.5 32.26169 18.75
Noturno Não quero declarar 64 59.37500 62.5 38.25320 25.00
Noturno Amarela 83 53.16265 50.0 45.98800 37.50
Noturno Branca 1367 55.50475 50.0 37.51674 37.50
Noturno Parda 718 53.62117 50.0 38.77546 25.00
Noturno Preta 190 53.48684 50.0 38.47323 37.50

Tabulação Cruzada

#Tabulação cruzada
table(ds.eng.final$Turno,
      ds.eng.final$Raca) %>% 
  kbl %>% kable_material_dark(full_width = F)
Amarela Branca Indígena Não quero declarar Parda Preta
Integral 98 2428 10 150 972 215
Matutino 43 559 5 56 383 89
Noturno 83 1367 6 64 718 190
Vespertino 2 42 2 3 85 6
#Tabulaçãoo cruzada proporção
prop.table(table(
  ds.eng.final$Turno,
  ds.eng.final$Raca
)) %>% 
  kbl %>% kable_material_dark(full_width = F)
Amarela Branca Indígena Não quero declarar Parda Preta
Integral 0.0129356 0.3204857 0.001320 0.0197994 0.1282999 0.0283791
Matutino 0.0056758 0.0737856 0.000660 0.0073918 0.0505544 0.0117476
Noturno 0.0109556 0.1804382 0.000792 0.0084477 0.0947730 0.0250792
Vespertino 0.0002640 0.0055438 0.000264 0.0003960 0.0112196 0.0007920

Nota-se que 50% dos alunos de Engenharia são de brancos, com 32% estudando em turno Integral e 18% no turno Noturno.

#assimetria e curtose - Turno
ds.eng.final_mod2 = ds.eng.final %>% 
  select(Turno,Nota,Raca) %>% 
  group_by(Turno) %>% 
  #filter(raca=="Branca") %>% 
  summarise(  quantidade=n(),
              media = mean(Nota),
              mediana = median(Nota),
              cv=sd(Nota)/media*100,
              amplitude_interquartil=IQR(Nota),
              assimetria=skewness(Nota),
              curtose=kurtosis(Nota)
  ) %>% 
  
  arrange(desc(cv))

ds.eng.final_mod2  %>% kbl %>% kable_material_dark(full_width = F)
Turno quantidade media mediana cv amplitude_interquartil assimetria curtose
Noturno 2428 54.81878 50.0 38.28903 37.5 -0.0846655 -0.4732720
Matutino 1135 60.59471 62.5 36.24448 25.0 -0.3142080 -0.4460625
Vespertino 140 52.58929 50.0 34.97707 25.0 -0.0880726 -0.4076159
Integral 3873 62.42254 62.5 32.64733 25.0 -0.4326055 -0.0185418
#assimetria e curtose - Raca
ds.eng.final_mod3 = ds.eng.final %>% 
  select(Turno,Nota,Raca) %>% 
  group_by(Raca) %>% 
  #filter(raca=="Branca") %>% 
  summarise(  quantidade=n(),
              media = mean(Nota),
              mediana = median(Nota),
              cv=sd(Nota)/media*100,
              amplitude_interquartil=IQR(Nota),
              assimetria=skewness(Nota),
              curtose=kurtosis(Nota)
  ) %>% 
  
  arrange(desc(cv))

ds.eng.final_mod3  %>% kbl %>% kable_material_dark(full_width = F)
Raca quantidade media mediana cv amplitude_interquartil assimetria curtose
Parda 2158 57.76182 62.5 36.87214 37.50 -0.1702805 -0.4509037
Amarela 226 58.24115 62.5 36.66857 25.00 -0.1568370 -0.2550657
Preta 500 57.70000 62.5 36.41962 37.50 -0.1679807 -0.6031054
Não quero declarar 273 63.04945 62.5 36.05273 25.00 -0.6131699 0.1548882
Branca 4396 60.45837 62.5 34.39455 25.00 -0.3501950 -0.2365703
Indígena 23 58.69565 62.5 31.08409 31.25 -0.0777072 -1.1225608

Gráficos adicionais

Histogramas

#Histograma
grafico_hist.turno= ggplot(ds.eng.final, aes(x = Nota, fill = Turno)) +
  geom_histogram(binwidth = 10) +
  ggtitle("Gráfico de Histograma da Nota por Turno") +
  ylab("Frequência") +
  xlab("Notas")
ggplotly(grafico_hist.turno)
grafico_hist.raca= ggplot(ds.eng.final, aes(x = Nota, fill = Raca)) +
  geom_histogram(binwidth = 10) +
  ggtitle("Gráfico de Histograma da Nota por Raça") +
  ylab("Frequência") +
  xlab("Notas") +
  guides(fill=guide_legend(title="Raça"))
ggplotly(grafico_hist.raca)
grafico_hist.raca.turno= ggplot(ds.eng.final, aes(x = Nota, fill = Turno)) +
  geom_histogram(binwidth = 10) +
  ggtitle("Gráfico de Histograma da Nota por Raça e Turno") +
  ylab("Frequência") +
  xlab("Notas") +
  facet_grid(~ Raca) +
  guides(fill=guide_legend(title="Raça"))
ggplotly(grafico_hist.raca.turno)

Esse gráfico nos permite ver que a frequência de alunos de raça branca é muito maior do que as demais, sendo a parda a segunda maior em frequencia.

BoxSplots

grafico_bp.raca= ggplot(ds.eng.final, aes(x = Raca, y = Nota, fill = Raca)) +
  geom_boxplot() +
  ggtitle("Gráfico de Box-plot da Nota por Raça") +
  xlab("Raça") +
  ylab("Notas") +
  guides(fill=guide_legend(title="Raça"))
ggplotly(grafico_bp.raca)

Nota-se que a média de notas por raça dos alunos de Engenharia é praticamente a mesma, contudo, alunos brancos e amarelos possuem uma variação de nota menor comparado aos pardos e negros. Baseado neste gráfico, poseria se desconfiar que os alunos brancos devem ter notas um pouco maiores do que os alunos negros.

grafico_bp.turno= ggplot(ds.eng.final, aes(x = Turno, y = Nota, fill = Turno)) +
  geom_boxplot() +
  ggtitle("Gráfico de Box-plot da Nota por Turno") +
  xlab("Turno") +
  ylab("Notas")
ggplotly(grafico_bp.turno)

Nota-se que os alunos que cursam Engenharia no turno Integral e Matutino possuem média de notas mais altas e um variação de notas menor do que os que que estudam à noite. Os alunos que estudam à tarde possuem uma distribuição semelhante àquelas que estudam de manhã ou integral, mas as notas são, em geral, menores do que a dos demais turnos. Pode-se então desconfiar que os alunos da manhã e integral vão ter notas maiores do que os que estudam tarde ou noite.

grafico_bp.raca.turno= ggplot(ds.eng.final, aes(x = Turno, y = Nota, fill = Turno)) +
  geom_boxplot() +
  ggtitle("Gráfico de Box-plot da Nota por Raça e Turno") +
  xlab("Turno") +
  ylab("Notas") +
  facet_grid(~ Raca) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
  guides(fill=guide_legend(title="Turno"))
ggplotly(grafico_bp.raca.turno)
grafico_bp.raca.regiao= ggplot(ds.eng.final, aes(x = Regiao, y = Nota, fill = Regiao)) +
  geom_boxplot() +
  ggtitle("Gráfico de Box-plot da Nota por Raça e Região") +
  xlab("Região") +
  ylab("Notas") +
  facet_grid(~ Raca) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
  guides(fill=guide_legend(title="Região"))
ggplotly(grafico_bp.raca.regiao)

Conclusões

  • Considerando observações de Nota sem NA (d_sem_NA$Nota), 25% das observações tiraram nota até 50.0, 50% das observações tiraram nota até 59.5 e 25% tiraram nota superior a 75.0;
  • Centro-Oeste tem a menor particiação no Enade em questão;
  • Indigenas tem a menor participação;
  • Turno Vespertino foi o menos procurado;
  • Brancos são mais presentes no Enade;
  • Brancos e Amarelos tem desempenho similar e ambos tem melhores notas que Indígenas;
  • Amarelos e Indigenas são os menos presentes no Enad;
  • Os Turnos mais procurados são Integral e Noturno;
  • O Turno Matutino tem média de Notas superior ao Turno Noturno;
  • A média de Notas dos Turnos Integral e Matunino São similares;
  • Raça Preta tem média de notas melhores na Região Sul;